import Page
import allure
from time import sleep
from Base.base import Base
from Base.get_driver import get_driver

"""PageGps类，作为导航页,继承Base类"""


class PageGps(Base):

# ---------------------------------------[单个操作]依赖/组合业务/断言使用-----------------------------------------------

    @allure.step(title="点击 设备管理")
    def page_click_device_manger(self):
        sleep(5)
        self.click_element(Page.gps_device_man_btn)

    @allure.step(title="设备管理 -->点击 设备列表")
    def page_click_device_list_opt(self):
        sleep(2)
        self.click_element(Page.gps_dev_list_btn)

    @allure.step(title="设备管理 -->点击 升级列表")
    def page_click_upgrade_list_opt(self):
        sleep(2)
        self.click_element(Page.gps_up_list_btn)

    @allure.step(title="点击 用户名")
    def page_click_account(self):
        sleep(1)
        self.click_element(Page.gps_account_look)

    @allure.step(title="用户名 -->点击退出登录")
    def page_click_logout(self):
        sleep(1)
        self.click_element(Page.gps_logout_btn)
        sleep(2)

#---------------------------------------------------[组合业务]test脚本使用----------------------------------------------

    # 组合业务方法  -->进入设备列表直接调用
    @allure.step(title="进入设备列表")
    def into_device_list(self):
        try:
            # 调用 点击设备管理
            self.page_click_device_manger()
            # 调用 点击设备列表选项
            self.page_click_device_list_opt()
        except Exception:
            try:
                sleep(2)
                # 调用 点击设备管理
                self.page_click_device_manger()
                # 调用 点击设备列表选项
                self.page_click_device_list_opt()
            except Exception as e:
                # 刷新
                self.refresh_current_page()
                # 退出登录
                self.logout_con()
                allure.attach("失败描述", "进入设备列表失败，原因：{}".format(e))
                raise Exception("进入设备列表失败")

    # 组合业务方法  -->进入升级列表直接调用
    @allure.step(title="进入升级列表")
    def into_upgrade_list(self):
        try:
            # 调用 点击设备管理
            self.page_click_device_manger()
            sleep(2)
            # 调用 点击升级列表选项
            self.page_click_upgrade_list_opt()
            sleep(1)
        except Exception:
            try:
                sleep(2)
                # 调用 点击设备管理
                self.page_click_device_manger()
                sleep(2)
                # 调用 点击升级列表选项
                self.page_click_upgrade_list_opt()
                sleep(1)
            except Exception as e:
                # 刷新
                self.refresh_current_page()
                # 退出登录
                self.logout_con()
                allure.attach("失败描述", "进入升级列表失败，原因：{}".format(e))
                raise Exception("进入升级列表失败")

    # 组合业务方法  -->退出登录直接调用
    @allure.step(title="退出登录操作")
    def logout_con(self):
        try:
            # 调用 点击用户名
            self.page_click_account()
            # 调用 点击退出登录
            self.page_click_logout()
        except Exception:
            try:
                sleep(2)
                # 调用 点击用户名
                self.page_click_account()
                # 调用 点击退出登录
                self.page_click_logout()
            except Exception as e:
                # 刷新
                self.refresh_current_page()
                # 退出登录
                self.logout_con()
                allure.attach("失败描述", "登录失败，原因：{}".format(e))
                raise Exception("退出登录失败")

#----------------------------------------------------[断言]test脚本使用-------------------------------------------------

    # 断言 -->应用列表按钮是否存在
    @allure.step(title="断言应用列表按钮是否存在")
    def if_app_list_exist(self):
        try:
            return self.base_element_is_exist(Page.gps_app_list_btn)
        except:
            return False

    # 断言 -->登录按钮是否存在
    @allure.step(title="断言登录按钮是否存在")
    def if_login_btn_exist(self):
        try:
            return self.base_element_is_exist(Page.login_btn_id)
        except:
            return False

if __name__ == '__main__':
    p = PageGps(get_driver())
    # 登录
    p.send_element(Page.login_email_id, Page.test_user)
    p.send_element(Page.login_password_id, Page.test_pwd)
    p.click_element(Page.login_btn_id)
    # 测试
    p.logout_con()
